%%
%% This is file `pythontex.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% pythontex.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2012-2019 by Geoffrey M. Poore <gpoore@gmail.com>
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%% 
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{pythontex}
    [2020/02/03 v0.18dev execute and typeset Python code and other languages]

\newcommand{\pytx@packagename}{PythonTeX}
\newcommand{\pytx@packageversion}{0.18dev}
\RequirePackage{fvextra}
\RequirePackage{etoolbox}
\RequirePackage{xstring}
\RequirePackage{pgfopts}
\RequirePackage{newfloat}
\@ifpackageloaded{currfile}{}{\RequirePackage{currfile}}
\AtEndPreamble{\@ifpackageloaded{color}{}{\RequirePackage{xcolor}}}
\def\pytx@families{}
\pgfkeys{/PYTX/pkgopt/usefamily/.estore in=\pytx@families}
\def\pytx@opt@gobble{none}
\pgfkeys{/PYTX/pkgopt/gobble/.is choice}
\pgfkeys{/PYTX/pkgopt/gobble/none/.code=\def\pytx@opt@gobble{none}}
\pgfkeys{/PYTX/pkgopt/gobble/auto/.code=\def\pytx@opt@gobble{auto}}
\newbool{pytx@opt@beta}
\pgfkeys{/PYTX/pkgopt/beta/.default=true}
\pgfkeys{/PYTX/pkgopt/beta/.is choice}
\pgfkeys{/PYTX/pkgopt/beta/true/.code=\booltrue{pytx@opt@beta}}
\pgfkeys{/PYTX/pkgopt/beta/false/.code=\boolfalse{pytx@opt@beta}}
\def\pytx@opt@rerun{default}
\pgfkeys{/PYTX/pkgopt/runall/.default=true}
\pgfkeys{/PYTX/pkgopt/runall/.is choice}
\pgfkeys{/PYTX/pkgopt/runall/true/.code=\def\pytx@opt@rerun{always}}
\pgfkeys{/PYTX/pkgopt/runall/false/.code=\relax}
\pgfkeys{/PYTX/pkgopt/rerun/.is choice}
\pgfkeys{/PYTX/pkgopt/rerun/never/.code=\def\pytx@opt@rerun{never}}
\pgfkeys{/PYTX/pkgopt/rerun/modified/.code=\def\pytx@opt@rerun{modified}}
\pgfkeys{/PYTX/pkgopt/rerun/errors/.code=\def\pytx@opt@rerun{errors}}
\pgfkeys{/PYTX/pkgopt/rerun/warnings/.code=\def\pytx@opt@rerun{warnings}}
\pgfkeys{/PYTX/pkgopt/rerun/always/.code=\def\pytx@opt@rerun{always}}
\pgfkeys{/PYTX/pkgopt/rerun/all/.code=\def\pytx@opt@rerun{always}%
    \PackageWarning{\pytx@packagename}{rerun=all is deprecated; use rerun=always}}
\def\pytx@opt@hashdependencies{default}
\pgfkeys{/PYTX/pkgopt/hashdependencies/.is choice}
\pgfkeys{/PYTX/pkgopt/hashdependencies/.default=true}
\pgfkeys{/PYTX/pkgopt/hashdependencies/true/.code=\def\pytx@opt@hashdependencies{true}}
\pgfkeys{/PYTX/pkgopt/hashdependencies/false/.code=\def\pytx@opt@hashdependencies{false}}
\newbool{pytx@opt@autoprint}
\booltrue{pytx@opt@autoprint}
\pgfkeys{/PYTX/pkgopt/autoprint/.default=true}
\pgfkeys{/PYTX/pkgopt/autoprint/.is choice}
\pgfkeys{/PYTX/pkgopt/autoprint/true/.code=\booltrue{pytx@opt@autoprint}}
\pgfkeys{/PYTX/pkgopt/autoprint/false/.code=\boolfalse{pytx@opt@autoprint}}
\pgfkeys{/PYTX/pkgopt/autostdout/.default=true}
\pgfkeys{/PYTX/pkgopt/autostdout/.is choice}
\pgfkeys{/PYTX/pkgopt/autostdout/true/.code=\booltrue{pytx@opt@autoprint}}
\pgfkeys{/PYTX/pkgopt/autostdout/false/.code=\boolfalse{pytx@opt@autoprint}}
\newcommand{\setpythontexautoprint}[1]{%
    \Depythontex{cmd:setpythontexautoprint:m:n}%
    \ifstrequal{#1}{true}{\booltrue{pytx@opt@autoprint}}{}%
    \ifstrequal{#1}{false}{\boolfalse{pytx@opt@autoprint}}{}%
}
\newcommand{\setpythontexautostdout}[1]{%
    \Depythontex{cmd:setpythontexautostdout:m:n}%
    \ifstrequal{#1}{true}{\booltrue{pytx@opt@autoprint}}{}%
    \ifstrequal{#1}{false}{\boolfalse{pytx@opt@autoprint}}{}%
}
\newbool{pytx@opt@stdout}
\booltrue{pytx@opt@stdout}
\pgfkeys{/PYTX/pkgopt/debug/.code=\boolfalse{pytx@opt@stdout}}
\pgfkeys{/PYTX/pkgopt/stdout/.default=true}
\pgfkeys{/PYTX/pkgopt/stdout/.is choice}
\pgfkeys{/PYTX/pkgopt/stdout/true/.code=\booltrue{pytx@opt@stdout}%
    \PackageWarning{\pytx@packagename}{Option stdout is deprecated; use option debug}}
\pgfkeys{/PYTX/pkgopt/stdout/false/.code=\boolfalse{pytx@opt@stdout}%
    \PackageWarning{\pytx@packagename}{Option stdout is deprecated; use option debug}}
\pgfkeys{/PYTX/pkgopt/print/.default=true}
\pgfkeys{/PYTX/pkgopt/print/.is choice}
\pgfkeys{/PYTX/pkgopt/print/true/.code=\booltrue{pytx@opt@stdout}%
    \PackageWarning{\pytx@packagename}{Option print is deprecated; use option debug}}
\pgfkeys{/PYTX/pkgopt/print/false/.code=\boolfalse{pytx@opt@stdout}%
    \PackageWarning{\pytx@packagename}{Option print is deprecated; use option debug}}
\AtBeginDocument{%
    \ifbool{pytx@opt@stdout}{}{%
        \PackageWarning{\pytx@packagename}{Using package option debug}%
    }%
}
\newbool{pytx@opt@stderr}
\pgfkeys{/PYTX/pkgopt/makestderr/.default=true}
\pgfkeys{/PYTX/pkgopt/makestderr/.is choice}
\pgfkeys{/PYTX/pkgopt/makestderr/true/.code=\booltrue{pytx@opt@stderr}}
\pgfkeys{/PYTX/pkgopt/makestderr/false/.code=\boolfalse{pytx@opt@stderr}}
\pgfkeys{/PYTX/pkgopt/stderr/.default=true}
\pgfkeys{/PYTX/pkgopt/stderr/.is choice}
\pgfkeys{/PYTX/pkgopt/stderr/true/.code=\booltrue{pytx@opt@stderr}%
    \PackageWarning{\pytx@packagename}{Option stderr is deprecated; use option makestderr}}
\pgfkeys{/PYTX/pkgopt/stderr/false/.code=\boolfalse{pytx@opt@stderr}%
    \PackageWarning{\pytx@packagename}{Option stderr is deprecated; use option makestderr}}

\def\pytx@opt@stderrfilename{full}
\pgfkeys{/PYTX/pkgopt/stderrfilename/.default=full}
\pgfkeys{/PYTX/pkgopt/stderrfilename/.is choice}
\pgfkeys{/PYTX/pkgopt/stderrfilename/full/.code=\def\pytx@opt@stderrfilename{full}}
\pgfkeys{/PYTX/pkgopt/stderrfilename/session/.code=\def\pytx@opt@stderrfilename{session}}
\pgfkeys{/PYTX/pkgopt/stderrfilename/genericfile/.code=%
    \def\pytx@opt@stderrfilename{genericfile}}
\pgfkeys{/PYTX/pkgopt/stderrfilename/genericscript/.code=%
    \def\pytx@opt@stderrfilename{genericscript}}
\def\pytx@opt@pyfuture{default}
\pgfkeys{/PYTX/pkgopt/pyfuture/.is choice}
\pgfkeys{/PYTX/pkgopt/pyfuture/default/.code=\def\pytx@opt@pyfuture{default}}
\pgfkeys{/PYTX/pkgopt/pyfuture/all/.code=\def\pytx@opt@pyfuture{all}}
\pgfkeys{/PYTX/pkgopt/pyfuture/none/.code=\def\pytx@opt@pyfuture{none}}
\def\pytx@opt@pyconfuture{none}
\pgfkeys{/PYTX/pkgopt/pyconfuture/.is choice}
\pgfkeys{/PYTX/pkgopt/pyconfuture/default/.code=\def\pytx@opt@pyconfuture{default}}
\pgfkeys{/PYTX/pkgopt/pyconfuture/all/.code=\def\pytx@opt@pyconfuture{all}}
\pgfkeys{/PYTX/pkgopt/pyconfuture/none/.code=\def\pytx@opt@pyconfuture{none}}
\newbool{pytx@opt@upquote}
\booltrue{pytx@opt@upquote}
\pgfkeys{/PYTX/pkgopt/upquote/.default=true}
\pgfkeys{/PYTX/pkgopt/upquote/.is choice}
\pgfkeys{/PYTX/pkgopt/upquote/true/.code=\booltrue{pytx@opt@upquote}}
\pgfkeys{/PYTX/pkgopt/upquote/false/.code=\boolfalse{pytx@opt@upquote}}
\newbool{pytx@opt@fixlr}
\pgfkeys{/PYTX/pkgopt/fixlr/.default=true}
\pgfkeys{/PYTX/pkgopt/fixlr/.is choice}
\pgfkeys{/PYTX/pkgopt/fixlr/true/.code=\booltrue{pytx@opt@fixlr}}
\pgfkeys{/PYTX/pkgopt/fixlr/false/.code=\boolfalse{pytx@opt@fixlr}}
\def\pytx@opt@keeptemps{none}
\pgfkeys{/PYTX/pkgopt/keeptemps/.default=all}
\pgfkeys{/PYTX/pkgopt/keeptemps/.is choice}
\pgfkeys{/PYTX/pkgopt/keeptemps/all/.code=\def\pytx@opt@keeptemps{all}}
\pgfkeys{/PYTX/pkgopt/keeptemps/code/.code=\def\pytx@opt@keeptemps{code}}
\pgfkeys{/PYTX/pkgopt/keeptemps/none/.code=\def\pytx@opt@keeptemps{none}}
\newbool{pytx@opt@pygments}
\booltrue{pytx@opt@pygments}
\pgfkeys{/PYTX/pkgopt/prettyprinter/.is choice}
\pgfkeys{/PYTX/pkgopt/prettyprinter/pygments/.code=\booltrue{pytx@opt@pygments}}
\pgfkeys{/PYTX/pkgopt/prettyprinter/fancyvrb/.code=\boolfalse{pytx@opt@pygments}}
\pgfkeys{/PYTX/pkgopt/pygments/.default=true}
\pgfkeys{/PYTX/pkgopt/pygments/.is choice}
\pgfkeys{/PYTX/pkgopt/pygments/true/.code=\booltrue{pytx@opt@pygments}}
\pgfkeys{/PYTX/pkgopt/pygments/false/.code=\boolfalse{pytx@opt@pygments}}
\newbool{pytx@opt@pyginline}
\booltrue{pytx@opt@pyginline}
\pgfkeys{/PYTX/pkgopt/prettyprintinline/.default=true}
\pgfkeys{/PYTX/pkgopt/prettyprintinline/.is choice}
\pgfkeys{/PYTX/pkgopt/prettyprintinline/true/.code=\booltrue{pytx@opt@pyginline}}
\pgfkeys{/PYTX/pkgopt/prettyprintinline/false/.code=\boolfalse{pytx@opt@pyginline}}
\pgfkeys{/PYTX/pkgopt/pyginline/.default=true}
\pgfkeys{/PYTX/pkgopt/pyginline/.is choice}
\pgfkeys{/PYTX/pkgopt/pyginline/true/.code=\booltrue{pytx@opt@pyginline}}
\pgfkeys{/PYTX/pkgopt/pyginline/false/.code=\boolfalse{pytx@opt@pyginline}}
\def\pytx@pyglexer{}
\pgfkeys{/PYTX/pkgopt/pyglexer/.code=\def\pytx@pyglexer{#1}}
\def\pytx@pygopt{}
\pgfkeys{/PYTX/pkgopt/pygopt/.code=\def\pytx@pygopt{#1}\pgfkeys{/PYTX/gopt/pygopt/.cd, #1}}
\pgfkeys{/PYTX/gopt/pygopt/.is choice}
\pgfkeys{/PYTX/gopt/pygopt/texcomments/.code=\relax}
\pgfkeys{/PYTX/gopt/pygopt/mathescape/.code=\relax}
\pgfkeys{/PYTX/gopt/pygopt/style/.code=\ifstrempty{#1}{}{\def\pytx@style{#1}}}
\pgfkeys{/PYTX/lopt/pygopt/.is choice}
\pgfkeys{/PYTX/lopt/pygopt/name/.code=\def\pytx@tmp@name{#1}}
\pgfkeys{/PYTX/lopt/pygopt/texcomments/.code=\relax}
\pgfkeys{/PYTX/lopt/pygopt/mathescape/.code=\relax}
\pgfkeys{/PYTX/lopt/pygopt/style/.code=\ifstrempty{#1}{}{%
  \expandafter\def\csname pytx@style@\pytx@tmp@name\endcsname{#1}}}
\pgfkeys{/PYTX/popt/pygopt/.is choice}
\pgfkeys{/PYTX/popt/pygopt/name/.code=\def\pytx@tmp@name{#1}}
\pgfkeys{/PYTX/popt/pygopt/texcomments/.code=\relax}
\pgfkeys{/PYTX/popt/pygopt/mathescape/.code=\relax}
\pgfkeys{/PYTX/popt/pygopt/style/.code=\ifstrempty{#1}{}{%
  \expandafter\def\csname pytx@style@PYG\pytx@tmp@name\endcsname{#1}}}
\def\pytx@fvextfile{-1}
\pgfkeys{/PYTX/pkgopt/fvextfile/.default=25}
\pgfkeys{/PYTX/pkgopt/fvextfile/.code=\IfInteger{#1}{%
    \ifnum#1>0\relax
        \def\pytx@fvextfile{#1}%
    \else
        \PackageError{\pytx@packagename}{option fvextfile must be an integer > 0}{}%
    \fi}%
    {\PackageError{\pytx@packagename}{option fvextfile must be an integer > 0}{}}%
}
\def\pytx@opt@pyconbanner{none}
\pgfkeys{/PYTX/pkgopt/pyconbanner/.is choice}
\pgfkeys{/PYTX/pkgopt/pyconbanner/none/.code=\def\pytx@opt@pyconbanner{none}}
\pgfkeys{/PYTX/pkgopt/pyconbanner/standard/.code=\def\pytx@opt@pyconbanner{standard}}
\pgfkeys{/PYTX/pkgopt/pyconbanner/default/.code=\def\pytx@opt@pyconbanner{default}}
\pgfkeys{/PYTX/pkgopt/pyconbanner/pyversion/.code=\def\pytx@opt@pyconbanner{pyversion}}
\def\pytx@opt@pyconfilename{stdin}
\pgfkeys{/PYTX/pkgopt/pyconfilename/.is choice}
\pgfkeys{/PYTX/pkgopt/pyconfilename/stdin/.code=\def\pytx@opt@pyconfilename{stdin}}
\pgfkeys{/PYTX/pkgopt/pyconfilename/console/.code=\def\pytx@opt@pyconfilename{console}}
\newbool{pytx@opt@depythontex}
\pgfkeys{/PYTX/pkgopt/depythontex/.default=true}
\pgfkeys{/PYTX/pkgopt/depythontex/.is choice}
\pgfkeys{/PYTX/pkgopt/depythontex/true/.code=\booltrue{pytx@opt@depythontex}}
\pgfkeys{/PYTX/pkgopt/depythontex/false/.code=\boolfalse{pytx@opt@depythontex}}
\let\Depythontex\@gobble
\let\DepyFile\@gobble
\let\DepyMacro\@gobble
\let\DepyListing\@empty
\ProcessPgfPackageOptions{/PYTX/pkgopt}
\ifbool{pytx@opt@fixlr}{
    \IfStrEq{\detokenize\expandafter{\left}}{\detokenize{\left}}{
        \let\originalleft\left
        \let\originalright\right
        \renewcommand{\left}{\mathopen{}\mathclose\bgroup\originalleft}
        \renewcommand{\right}{\aftergroup\egroup\originalright}
    }{}
}{}
\ifbool{pytx@opt@upquote}{\RequirePackage{upquote}}{}
\ifbool{pytx@opt@depythontex}{\boolfalse{pytx@opt@pygments}}{}
\def\pytx@CheckCounter#1{%
    \ifcsname c@#1\endcsname\else\newcounter{#1}\fi
}
\def\pytx@SVMCR#1{%
    \edef\pytx@tmp{\csname #1\endcsname}%
    \begingroup
    \endlinechar`\^^J
    \let\do\@makeother\dospecials
    \pytx@SVMCR@i}
\begingroup
\catcode`!=0
!catcode`!\=12
!long!gdef!pytx@SVMCR@i#1\endpytx@SVMCR^^J{%
    !endgroup
    !expandafter!gdef!pytx@tmp{%
        !expandafter!scantokens!expandafter{#1!empty}}%
}%
!endgroup
\DefineVerbatimEnvironment{pytx@Verbatim}{Verbatim}{}
\DefineVerbatimEnvironment{pytx@SaveVerbatim}{SaveVerbatim}{}
\newcommand{\setpythontexcontext}[1]{%
    \Depythontex{cmd:setpythontexcontext:m:n}%
    \def\pytx@SetContext{%
        \edef\pytx@context{#1}%
    }%
}
\setpythontexcontext{}
\@onlypreamble\setpythontexcontext
\newcommand{\restartpythontexsession}[1]{%
    \Depythontex{cmd:restartpythontexsession:m:n}%
    \def\pytx@SetGroup{%
        \edef\pytx@group{#1}%
    }%
    \def\pytx@SetGroupVerb{%
        \edef\pytx@group{#1verb}%
    }%
    \def\pytx@SetGroupCons{%
        \edef\pytx@group{#1cons}%
    }%
    \AtBeginDocument{%
        \pytx@SetGroup
        \IfSubStr{\pytx@group}{verb}{%
            \PackageError{\pytx@packagename}%
                {String "verb" is not allowed in \string\restartpythontexsession}%
                {Use \string\restartpythontexsession with a valid argument}}{}%
        \IfSubStr{\pytx@group}{cons}{%
            \PackageError{\pytx@packagename}%
                {String "cons" is not allowed in \string\restartpythontexsession}%
                {Use \string\restartpythontexsession with a valid argument}}{}%
    }%
}
\@onlypreamble\restartpythontexsession
\restartpythontexsession{default}
\StrSubstitute{\jobname}{ }{-}[\pytx@jobname]
\StrSubstitute{\pytx@jobname}{"}{}[\pytx@jobname]
\StrSubstitute{\pytx@jobname}{*}{-}[\pytx@jobname]
\def\pytx@outputdir{pythontex-files-\pytx@jobname}
\newcommand{\setpythontexoutputdir}[1]{%
    \Depythontex{cmd:setpythontexoutputdir:m:n}%
    \def\pytx@outputdir{#1}}
\@onlypreamble\setpythontexoutputdir
\def\pytx@workingdir{.}
\def\pytx@workingdirset{false}
\newcommand{\setpythontexworkingdir}[1]{%
    \Depythontex{cmd:setpythontexworkingdir:m:n}%
    \def\pytx@workingdir{#1}%
    \def\pytx@workingdirset{true}%
}
\@onlypreamble\setpythontexworkingdir
\AtBeginDocument{%
    \ifdefstring{\pytx@workingdir}{<outputdir>}%
        {\let\pytx@workingdir\pytx@outputdir}{}%
    \ifdefstrequal{\pytx@workingdir}{\pytx@outputdir}{%
        \@ifpackageloaded{graphicx}{%
            \ifx\Ginput@path\@undefined
                \graphicspath{{\pytx@outputdir/}}%
            \else
                \g@addto@macro\Ginput@path{{\pytx@outputdir/}}%
            \fi
        }{}%
    }{}%
}
\newbool{pytx@usedpygments}
\AfterEndPreamble{%
  \ifbool{pytx@usedpygments}%
   {\InputIfFileExists{\pytx@outputdir/\pytx@jobname.pytxpyg}{}{}%
    \ifcsname PYGZsq\endcsname
      \ifdefstring{\PYGZsq}{\char`\'}{\pytx@patch@PYGZsq}{}%
    \fi}%
   {}%
}
\begingroup
\catcode`\'=\active
\gdef\pytx@patch@PYGZsq{\gdef\PYGZsq{'}}
\endgroup
\AtBeginDocument{%
    \makeatletter
    \InputIfFileExists{\pytx@outputdir/\pytx@jobname.pytxmcr}{}%
        {\ifstrempty{\pytx@outputdir}%
            {\typeout{No file \pytx@jobname.pytxmcr.}}%
            {}%
         \IfStrEq{\pytx@outputdir}{.}%
            {\typeout{No file \pytx@jobname.pytxmcr.}}%
            {\typeout{No file \pytx@outputdir/\pytx@jobname.pytxmcr.}}%
         \typeout{Run \pytx@packagename\space to create it.}}%
    \makeatother
}
\newwrite\pytx@codefile
\immediate\openout\pytx@codefile=\jobname.pytxcode
\edef\pytx@delimchar{\string#}
\edef\pytx@delim{=\string>PYTHONTEX\string#}
\edef\pytx@delimsettings{=\string>PYTHONTEX:SETTINGS\string#}
\AtEndDocument{%
    \immediate\write\pytx@codefile{\pytx@delimsettings}%
    \immediate\write\pytx@codefile{version=\pytx@packageversion}%
    \immediate\write\pytx@codefile{outputdir=\pytx@outputdir}%
    \immediate\write\pytx@codefile{workingdir=\pytx@workingdir}%
    \immediate\write\pytx@codefile{workingdirset=\pytx@workingdirset}%
    \immediate\write\pytx@codefile{gobble=\pytx@opt@gobble}%
    \immediate\write\pytx@codefile{rerun=\pytx@opt@rerun}%
    \immediate\write\pytx@codefile{hashdependencies=\pytx@opt@hashdependencies}%
    \immediate\write\pytx@codefile{makestderr=\ifbool{pytx@opt@stderr}{true}{false}}%
    \immediate\write\pytx@codefile{stderrfilename=\pytx@opt@stderrfilename}%
    \immediate\write\pytx@codefile{keeptemps=\pytx@opt@keeptemps}%
    \immediate\write\pytx@codefile{pyfuture=\pytx@opt@pyfuture}%
    \immediate\write\pytx@codefile{pyconfuture=\pytx@opt@pyconfuture}%
    \immediate\write\pytx@codefile{pygments=\ifbool{pytx@opt@pygments}{true}{false}}%
    \immediate\write\pytx@codefile{pygglobal=:GLOBAL|\pytx@pyglexer|\pytx@pygopt}%
    \immediate\write\pytx@codefile{fvextfile=\pytx@fvextfile}%
    \immediate\write\pytx@codefile{pyconbanner=\pytx@opt@pyconbanner}%
    \immediate\write\pytx@codefile{pyconfilename=\pytx@opt@pyconfilename}%
    \immediate\write\pytx@codefile{depythontex=\ifbool{pytx@opt@depythontex}{true}{false}}%
}
\def\pytx@argsrun{}
\def\pytx@argspprint{}
\def\pytx@WriteCodefileInfo{%
    \ifcurrfile{\currfilebase}{\jobname}%
        {\let\pytx@currfile\@empty}{\let\pytx@currfile\currfilename}%
    \immediate\write\pytx@codefile{\pytx@delim\pytx@type\pytx@delimchar%
        \pytx@session\pytx@delimchar\pytx@group\pytx@delimchar%
        \arabic{\pytx@counter}\pytx@delimchar\pytx@cmd\pytx@delimchar%
        \pytx@context\pytx@delimchar\pytx@argsrun\pytx@delimchar%
        \pytx@argspprint\pytx@delimchar%
        \pytx@currfile\pytx@delimchar%
        \the\inputlineno\pytx@delimchar}%
}
\newcommand{\pytx@WriteCodefileInfoExt}[1][]{%
    \ifcurrfile{\currfilebase}{\jobname}%
            {\let\pytx@currfile\@empty}{\let\pytx@currfile\currfilename}%
    \immediate\write\pytx@codefile{\pytx@delim\pytx@type\pytx@delimchar%
        \pytx@session\pytx@delimchar\pytx@group\pytx@delimchar%
        \arabic{\pytx@counter}\pytx@delimchar\pytx@cmd\pytx@delimchar%
        \pytx@context\pytx@delimchar\pytx@argsrun\pytx@delimchar%
        \pytx@argspprint\pytx@delimchar%
        \pytx@currfile\pytx@delimchar%
        \the\inputlineno\pytx@delimchar#1}%
}
\newcommand{\setpythontexfv}[2][]{%
    \Depythontex{cmd:setpythontexfv:om:n}%
    \ifstrempty{#1}%
        {\gdef\pytx@fvsettings{#2}}%
        {\expandafter\gdef\csname pytx@fvsettings@#1\endcsname{#2}}%
}%
\setpythontexfv{tabsize=4}
\def\pytx@FVSet{%
    \expandafter\let\expandafter\pytx@fvsettings@@%
        \csname pytx@fvsettings@\pytx@type\endcsname
    \ifdefstring{\pytx@fvsettings@@}{}%
        {}%
        {\expandafter\fvset\expandafter{\pytx@fvsettings@@}}%
    \ifdefstring{\pytx@fvsettings}{}%
        {}%
        {\expandafter\fvset\expandafter{\pytx@fvsettings}}%
}

\newcounter{pytx@FancyVerbLineTemp}
\def\pytx@FVB@SaveVerbatim#1{%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \global\FV@CodeLineNo\z@
    \@bsphack
    \begingroup
    \FV@UseKeyValues
    \def\SaveVerbatim@Name{#1}%
    \def\FV@ProcessLine##1{%
        \expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{%
        \FV@TheVerbatim\FV@StepLineNo\FV@ProcessLine{##1}}}%
    \gdef\FV@TheVerbatim{\FV@CodeLineNo=1}%
    \FV@Scan}
\def\pytx@FVE@SaveVerbatim{%
    \expandafter\global\expandafter\let
    \csname FV@SV@\SaveVerbatim@Name\endcsname\FV@TheVerbatim
    \endgroup\@esphack
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}}
\let\FVB@SaveVerbatim\pytx@FVB@SaveVerbatim
\let\FVE@SaveVerbatim\pytx@FVE@SaveVerbatim
\def\pytx@ConfigPygments{%
  \def\pytx@currentstyle{default}%
  \ifcsname pytx@style\endcsname
    \let\pytx@currentstyle\pytx@style
  \else
    \ifcsname pytx@style@\pytx@type\endcsname
      \expandafter\let\expandafter\pytx@currentstyle\csname pytx@style@\pytx@type\endcsname
    \fi
  \fi
  \expandafter\let\expandafter\PYG@style\csname PYG\pytx@currentstyle\endcsname
  \VerbatimPygments{\PYG}{\PYG@style}}
\def\pytx@stdfile{}
\def\pytx@stdout@warntext{}
\def\pytx@FetchStdoutfile[#1][#2]#3{%
    \IfFileExists{\pytx@outputdir/#3.stdout}{%
        \ifstrempty{#1}{\input{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{raw}{\input{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{verb}{\BVerbatimInput[#2]{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{verbatim}{\VerbatimInput[#2]{\pytx@outputdir/#3.stdout}}{}%
        \DepyFile{p:\pytx@outputdir/#3.stdout:mode=#1}%
    }%
    {\pytx@stdout@warntext
        \PackageWarning{\pytx@packagename}{Non-existent printed content}}%
}
\ifbool{pytx@opt@stdout}{}{\def\pytx@FetchStdoutfile[#1][#2]#3{}}
\AtBeginDocument{\def\pytx@stdout@warntext{\textbf{??~\pytx@packagename~??}}}
\def\stdoutpythontex{%
    \Depythontex{cmd:stdoutpythontex:oo:p}%
    \@ifnextchar[{\pytx@Stdout}{\pytx@Stdout[raw]}%
}
\def\pytx@Stdout[#1]{%
    \@ifnextchar[{\pytx@Stdout@i[#1]}{\pytx@Stdout@i[#1][]}%
}
\def\pytx@Stdout@i[#1][#2]{%
    \pytx@FetchStdoutfile[#1][#2]{\pytx@stdfile}%
}
\def\printpythontex{%
    \Depythontex{cmd:printpythontex:oo:p}%
    \@ifnextchar[{\pytx@Stdout}{\pytx@Stdout[raw]}%
}
\def\savestdoutpythontex{%
    \Depythontex{cmd:savestdoutpythontex:m:n}%
    \savestdoutpythontex@i
}
\def\savestdoutpythontex@i#1{%
    \ifcsname pytx@SVout@#1\endcsname
        \PackageError{\pytx@packagename}%
            {Attempt to save content using an already-defined name}%
            {Use a name that is not already defined}%
    \else
        \expandafter\edef\csname pytx@SVout@#1\endcsname{\pytx@stdfile}%
    \fi
}
\def\saveprintpythontex{%
    \Depythontex{cmd:saveprintpythontex:m:n}%
    \savestdoutpythontex@i
}
\def\usestdoutpythontex{%
    \Depythontex{cmd:usestdoutpythontex:oom:p}%
    \@ifnextchar[{\pytx@UseStdout}{\pytx@UseStdout[]}%
}
\def\pytx@UseStdout[#1]{%
    \@ifnextchar[{\pytx@UseStdout@i[#1]}{\pytx@UseStdout@i[#1][]}%
}
\def\pytx@UseStdout@i[#1][#2]#3{%
    \ifcsname pytx@SVout@#3\endcsname
        \pytx@FetchStdoutfile[#1][#2]{\csname pytx@SVout@#3\endcsname}%
    \else
        \textbf{??~\pytx@packagename~??}%
        \PackageWarning{\pytx@packagename}{Non-existent saved printed content}%
    \fi
}
\def\useprintpythontex{%
    \Depythontex{cmd:useprintpythontex:oom:p}%
    \@ifnextchar[{\pytx@UseStdout}{\pytx@UseStdout[]}%
}
\def\pytx@FetchStderrfile[#1][#2]#3{%
    \IfFileExists{\pytx@outputdir/#3.stderr}{%
        \ifstrequal{#1}{raw}{\input{\pytx@outputdir/#3.stderr}}{}%
        \ifstrempty{#1}{\VerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \ifstrequal{#1}{verb}{\BVerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \ifstrequal{#1}{verbatim}{\VerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \DepyFile{p:\pytx@outputdir/#3.stderr:mode=#1}%
    }%
    {\textbf{??~\pytx@packagename~??}%
        \PackageWarning{\pytx@packagename}{Non-existent stderr content}}%
}
\def\stderrpythontex{%
    \Depythontex{cmd:stderrpythontex:oo:p}%
    \@ifnextchar[{\pytx@Stderr}{\pytx@Stderr[verbatim]}%
}
\def\pytx@Stderr[#1]{%
    \@ifnextchar[{\pytx@Stderr@i[#1]}{\pytx@Stderr@i[#1][]}%
}
\def\pytx@Stderr@i[#1][#2]{%
    \pytx@FetchStderrfile[#1][#2]{\pytx@stdfile}%
}
\def\savestderrpythontex#1{%
    \Depythontex{cmd:savestderrpythontex:m:n}%
    \ifcsname pytx@SVerr@#1\endcsname
        \PackageError{\pytx@packagename}%
            {Attempt to save content using an already-defined name}%
            {Use a name that is not already defined}%
    \else
        \expandafter\edef\csname pytx@SVerr@#1\endcsname{\pytx@stdfile}%
    \fi
}
\def\usestderrpythontex{%
    \Depythontex{cmd:usestderrpythontex:oom:p}%
    \@ifnextchar[{\pytx@UseStderr}{\pytx@UseStderr[verb]}%
}
\def\pytx@UseStderr[#1]{%
    \@ifnextchar[{\pytx@UseStderr@i[#1]}{\pytx@UseStderr@i[#1][]}%
}
\def\pytx@UseStderr@i[#1][#2]#3{%
    \ifcsname pytx@SVerr@#3\endcsname
        \pytx@FetchStderrfile[#1][#2]{\csname pytx@SVerr@#3\endcsname}%
    \else
        \textbf{??~\pytx@packagename~??}%
        \PackageWarning{\pytx@packagename}{Non-existent saved stderr content}%
    \fi
}
\ifbool{pytx@opt@depythontex}{%
    \newwrite\pytx@depyfile
    \immediate\openout\pytx@depyfile=\jobname.depytx
}{}
\let\pytx@lexer\relax
\def\Depythontex@orig#1{%
    \immediate\write\pytx@depyfile{=>DEPYTHONTEX\pytx@delimchar#1:%
        \the\inputlineno:\ifx\pytx@lexer\relax\else\pytx@lexer\fi\pytx@delimchar}%
    \let\pytx@lexer\relax}
\ifbool{pytx@opt@depythontex}%
    {\let\Depythontex\Depythontex@orig}%
    {\let\Depythontex\@gobble}
\ifbool{pytx@opt@depythontex}{%
\AtEndDocument{%
    \immediate\write\pytx@depyfile{=>DEPYTHONTEX:SETTINGS\pytx@delimchar version=%
        \pytx@packageversion\pytx@delimchar}%
    \immediate\write\pytx@depyfile{=>DEPYTHONTEX:SETTINGS\pytx@delimchar macrofile=%
        \pytx@outputdir/\pytx@jobname.pytxmcr\pytx@delimchar}%
    \immediate\write\pytx@depyfile{=>DEPYTHONTEX:SETTINGS\pytx@delimchar outputdir=%
        \pytx@outputdir\pytx@delimchar}%
    \immediate\write\pytx@depyfile{=>DEPYTHONTEX:SETTINGS\pytx@delimchar graphicx=%
            \ifcsname graphicspath\endcsname true\else false\fi\pytx@delimchar}%
    \immediate\write\pytx@depyfile{=>DEPYTHONTEX:SETTINGS\pytx@delimchar gobble=%
            \pytx@opt@gobble\pytx@delimchar}%
}%
}{}
\def\DepyMacro@orig#1{%
    \immediate\write\pytx@depyfile{MACRO:#1}%
}
\ifbool{pytx@opt@depythontex}%
    {\let\DepyMacro\DepyMacro@orig}%
    {\let\DepyMacro\@gobble}

\def\DepyFile@orig#1{%
    \immediate\write\pytx@depyfile{FILE:#1}%
}%
\ifbool{pytx@opt@depythontex}%
    {\let\DepyFile\DepyFile@orig}%
    {\let\DepyFile\@gobble}
\newcommand{\pytx@DepyListing@write}{%
    \immediate\write\pytx@depyfile{LISTING:firstnumber=\arabic{FancyVerbLine}}%
}
\def\DepyListing@orig{%
    \let\oldFancyVerbLine\theFancyVerbLine
    \def\theFancyVerbLine{%
        \pytx@DepyListing@write
        \expandafter\gdef\expandafter\theFancyVerbLine\expandafter{\oldFancyVerbLine}%
        \theFancyVerbLine
    }%
}
\ifbool{pytx@opt@depythontex}%
    {\let\DepyListing\DepyListing@orig}%
    {\let\DepyListing\@empty}
\newcommand{\DepythontexOn}{%
    \let\Depythontex\Depythontex@orig
    \let\DepyMacro\DepyMacro@orig
    \let\DepyFile\DepyFile@orig
    \let\DepyListing\DepyListing@orig
}
\newcommand{\DepythontexOff}{%
    \let\Depythontex\@gobble
    \let\DepyMacro\@gobble
    \let\DepyFile\@gobble
    \let\DepyListing\@empty
}
\def\pytx@Inline{%
    \begingroup
    \let\do\@makeother\dospecials
    \catcode`\{=1
    \@ifnextchar[{\endgroup\pytx@InlineOarg}{\endgroup\pytx@InlineOarg[]}%
}%
\def\pytx@InlineOarg[#1]{%
    \ifstrempty{#1}{\edef\pytx@session{default}}{\StrSubstitute{#1}{:}{-}[\pytx@session]}%
    \begingroup
    \let\do\@makeother\dospecials
    \catcode`\{=1
    \catcode`\}=2
    \catcode`\ =\active
    \catcode`\^^I=\active
    \@ifnextchar\bgroup
        {\pytx@InlineMargBgroup}%
        {\catcode`\{=12
            \catcode`\}=12
            \pytx@InlineMargOther}%
}
\def\pytx@InlineMargOther#1{%
    \endgroup
    \ifstrequal{#1}{ }{%
        \PackageError{\pytx@packagename}%
            {The space character cannot be used as a delimiting character}%
            {Choose another delimiting character}}{}%
    \def\pytx@InlineMargOtherGet##1#1{\pytx@InlineMargBgroup{##1}}%
    \begingroup
    \let\do\@makeother\dospecials
    \pytx@InlineMargOtherGet
}
\def\pytx@InlineMargBgroup#1{%
    \endgroup
    \def\pytx@argdetok{\detokenize{#1}}%
    \def\pytx@arg{#1}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \pytx@InlineShow
    \pytx@InlineSave
    \pytx@InlinePrint
    \stepcounter{\pytx@counter}%
}%
\def\pytx@InlineShowFV{%
    \def\pytx@argretok{%
        \begingroup
        \everyeof{\noexpand}%
        \endlinechar-1\relax
        \let\do\@makeother\dospecials
        \catcode`\ =\active
        \catcode`\^^I=\active
        \expandafter\scantokens\expandafter{\pytx@arg}%
        \endgroup}%
    \begingroup
    \pytx@FVSet
    \FV@BeginVBox
    \frenchspacing
    \FV@SetupFont
    \FV@DefineWhiteSpace
    \FancyVerbDefineActive
    \FancyVerbFormatCom
    \FV@ObeyTabsInit
    \hbox{\FancyVerbFormatLine{\pytx@argretok}}%
    \FV@EndVBox
    \endgroup
}
\def\pytx@InlineShowPyg{%
    \begingroup
    \pytx@FVSet
    \pytx@ConfigPygments
    \ifcsname FV@SV@\pytx@counter @\arabic{\pytx@counter}\endcsname
        \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
        \BUseVerbatim{\pytx@counter @\arabic{\pytx@counter}}%
        \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \else
        \textbf{??}%
        \PackageWarning{\pytx@packagename}{Non-existent Pygments content}%
    \fi
    \endgroup
}
\def\pytx@InlineSaveCode{%
    \pytx@WriteCodefileInfo
    \immediate\write\pytx@codefile{\pytx@argdetok}%
}
\let\pytx@InlineAutoprint\@empty
\AtBeginDocument{
    \def\pytx@InlineAutoprint{%
        \ifbool{pytx@opt@autoprint}{%
            \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.stdout}%
                {\DepyFile{p:\pytx@outputdir/\pytx@stdfile.stdout}}{}}{}%
    }
    \ifbool{pytx@opt@stdout}{}{\let\pytx@InlineAutoprint\@empty}
}
\def\pytx@InlineAlwaysprint{%
    \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.stdout}%
       {\DepyFile{p:\pytx@outputdir/\pytx@stdfile.stdout}}%
       {\textbf{??}%
        \PackageWarning{\pytx@packagename}{Missing sub content}}}
\def\pytx@InlineMacroprint{%
    \edef\pytx@mcr{pytx@MCR@\pytx@type @\pytx@session @\pytx@group @\arabic{\pytx@counter}}%
    \ifcsname\pytx@mcr\endcsname
        \csname\pytx@mcr\endcsname
        \DepyMacro{p:\pytx@mcr}%
    \else
        \textbf{??}%
        \PackageWarning{\pytx@packagename}{Missing autoprint content}%
    \fi
}
\ifbool{pytx@opt@stdout}{}{\let\pytx@InlineMacroprint\@empty}
\def\pytx@InlineMacroprintFV{%
    \edef\pytx@mcr{pytx@\pytx@type @\pytx@session @\pytx@group @\arabic{\pytx@counter}}%
    \ifcsname FV@SV@\pytx@mcr\endcsname
        \BUseVerbatim{\pytx@mcr}%
        \DepyMacro{c:\pytx@mcr}%
    \else
        \textbf{??}%
        \PackageWarning{\pytx@packagename}{Missing autoprint content}%
    \fi
}
\ifbool{pytx@opt@stdout}{}{\let\pytx@InlineMacroprint\@empty}
\newcommand{\pytx@MakeInlinebFV}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1b\endcsname}{%
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{cmd:#1b:ov:c}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{b}%
        \pytx@SetContext
        \pytx@SetGroup
        \let\pytx@InlineShow\pytx@InlineShowFV
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\@empty
        \pytx@Inline
    }%
}%
\newcommand{\pytx@MakeInlinebPyg}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1b\endcsname}{%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{b}%
        \pytx@SetContext
        \pytx@SetGroup
        \let\pytx@InlineShow\pytx@InlineShowPyg
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\@empty
        \pytx@Inline
    }%
}%
\newcommand{\pytx@MakeInlinevFV}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1v\endcsname}{%
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{cmd:#1v:ov:c}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{v}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \let\pytx@InlineShow\pytx@InlineShowFV
        \let\pytx@InlineSave\@empty
        \let\pytx@InlinePrint\@empty
        \pytx@Inline
    }%
}%
\newcommand{\pytx@MakeInlinevPyg}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1v\endcsname}{%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{v}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \let\pytx@InlineShow\pytx@InlineShowPyg
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\@empty
        \pytx@Inline
    }%
}%
\newcommand{\pytx@MakeInlinecFV}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1c\endcsname}{%
        \Depythontex{cmd:#1c:ov:p}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{c}%
        \pytx@SetContext
        \pytx@SetGroup
        \let\pytx@InlineShow\@empty
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\pytx@InlineAutoprint
        \pytx@Inline
    }%
}%
\let\pytx@MakeInlinecPyg\pytx@MakeInlinecFV
\newcommand{\pytx@MakeInlinesFV}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1s\endcsname}{%
        \Depythontex{cmd:#1s:ov:p}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{s}%
        \pytx@SetContext
        \pytx@SetGroup
        \let\pytx@InlineShow\@empty
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\pytx@InlineAlwaysprint
        \pytx@Inline
    }%
}%
\let\pytx@MakeInlinesPyg\pytx@MakeInlinesFV
\newcommand{\pytx@MakeInlineFV}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1\endcsname}{%
        \Depythontex{cmd:#1:ov:p}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{i}%
        \pytx@SetContext
        \pytx@SetGroup
        \let\pytx@InlineShow\@empty
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\pytx@InlineMacroprint
        \pytx@Inline
    }%
}%
\let\pytx@MakeInlinePyg\pytx@MakeInlineFV
\newcommand{\pytx@MakeInlineConsFV}[1]{%
    \expandafter\newrobustcmd\expandafter{\csname #1\endcsname}{%
        \Depythontex{cmd:#1:ov:c}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{i}%
        \pytx@SetContext
        \pytx@SetGroup
        \let\pytx@InlineShow\@empty
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\pytx@InlineMacroprintFV
        \pytx@Inline
    }%
}%
\let\pytx@MakeInlineConsPyg\pytx@MakeInlineConsFV
\newrobustcmd{\pythontexcustomc}[2][begin]{%
    \Depythontex{cmd:pythontexcustomc:omv:p}%
    \ifstrequal{#1}{begin}{}{%
        \ifstrequal{#1}{end}{}{\PackageError{\pytx@packagename}%
            {Invalid optional argument for \string\pythontexcustomc}{}
        }%
    }%
    \xdef\pytx@type{CC:#2:#1}%
    \edef\pytx@cmd{c}%
    \pytx@SetContext
    \def\pytx@group{none}%
    \let\pytx@InlineShow\@empty
    \let\pytx@InlineSave\pytx@InlineSaveCode
    \let\pytx@InlinePrint\@empty
    \pytx@Inline[none]%
}%
\def\setpythontexcustomcode#1{%
    \Depythontex{cmd:setpythontexcustomcode:mv:p}%
    \PackageWarning{\pytx@packagename}{The command
        \string\setpythontexcustomcode\space has been deprecated;
        use \string\pythontexcustomc\space or pythontexcustomcode instead}%
    \begingroup
    \let\do\@makeother\dospecials
    \catcode`\{=1
    \catcode`\}=2
    \catcode`\^^M=10\relax
    \pytx@SetCustomCode{#1}%
}
\long\def\pytx@SetCustomCode#1#2{%
    \endgroup
    \pythontexcustomc{#1}{pythontexcustomcode=[#2];
        exec('for expr in pythontexcustomcode: exec(expr)');
        del(pythontexcustomcode)}
}
\@onlypreamble\setpythontexcustomcode
\begingroup
\catcode`\^^M=\active
\gdef\pytx@FancyVerbGetLine#1^^M{%
    \@nil%
    \FV@CheckEnd{#1}%
    \ifx\@tempa\FV@EnvironName%
        \ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi%
        \let\next\FV@EndScanning%
    \else%
        \def\FV@Line{#1}%
        \def\next{\FV@PreProcessLine\FV@GetLine}%
        \immediate\write\pytx@codefile{\detokenize{#1}}%
    \fi%
    \next}%
\endgroup
\newcommand{\pytx@MakeBlockFV}[1]{%
    \expandafter\newenvironment{#1block}{%
        \VerbatimEnvironment
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{env:#1block:oo|:c}%
        \DepyListing
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{block}%
        \pytx@SetContext
        \pytx@SetGroup
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginBlockEnvFV}{\endgroup\pytx@BeginBlockEnvFV[]}%
    }%
    {\end{Verbatim}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}
\def\pytx@BeginBlockEnvFV[#1]{%
    \ifstrempty{#1}{\edef\pytx@session{default}}{\StrSubstitute{#1}{:}{-}[\pytx@session]}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \edef\pytx@linecount{\pytx@counter @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@WriteCodefileInfo
    \let\FancyVerbGetLine\pytx@FancyVerbGetLine
    \pytx@FVSet
    \begin{Verbatim}%
}
\newcommand{\pytx@MakeVerbFV}[1]{%
    \expandafter\newenvironment{#1verbatim}{%
        \VerbatimEnvironment
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{env:#1verbatim:oo|:c}%
        \DepyListing
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{verbatim}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginVerbEnvFV}{\endgroup\pytx@BeginVerbEnvFV[]}%
    }%
    {\end{Verbatim}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}
\def\pytx@BeginVerbEnvFV[#1]{%
    \ifstrempty{#1}{\edef\pytx@session{default}}{\StrSubstitute{#1}{:}{-}[\pytx@session]}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \edef\pytx@linecount{\pytx@counter @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@FVSet
    \begin{Verbatim}%
}
\newcommand{\pytx@MakePygEnv}[2]{%
    \expandafter\newenvironment{#1#2}{%
        \VerbatimEnvironment
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{#2}%
        \pytx@SetContext
        \ifstrequal{#2}{block}{\pytx@SetGroup}{}
        \ifstrequal{#2}{verbatim}{\pytx@SetGroupVerb}{}
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginEnvPyg}{\endgroup\pytx@BeginEnvPyg[]}%
    }%
    {\end{VerbatimOut}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@FVSet
    \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
    \pytx@ConfigPygments
    \ifcsname FV@SV@\pytx@counter @\arabic{\pytx@counter}\endcsname
        \UseVerbatim{\pytx@counter @\arabic{\pytx@counter}}%
    \else
        \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.pygtex}{}%
            {\textbf{??~\pytx@packagename~??}%
                \PackageWarning{\pytx@packagename}{Non-existent Pygments content}}%
    \fi
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}%
\def\pytx@BeginEnvPyg[#1]{%
    \ifstrempty{#1}{\edef\pytx@session{default}}{\StrSubstitute{#1}{:}{-}[\pytx@session]}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \edef\pytx@linecount{\pytx@counter @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \pytx@WriteCodefileInfo
    \begingroup
    \obeylines
    \@ifnextchar[{\endgroup\pytx@BeginEnvPyg@i}{\endgroup\pytx@BeginEnvPyg@i[]}%
}%
\def\pytx@BeginEnvPyg@i[#1]{%
    \def\pytx@fvopttmp{#1}%
    \def\pytx@argspprint{#1}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \let\FVB@VerbatimOut\pytx@FVB@VerbatimOut
    \let\FVE@VerbatimOut\pytx@FVE@VerbatimOut
    \begin{VerbatimOut}%
}%
\newcommand{\pytx@MakeBlockPyg}[1]{\pytx@MakePygEnv{#1}{block}}
\newcommand{\pytx@MakeVerbPyg}[1]{\pytx@MakePygEnv{#1}{verbatim}}
\def\pytx@WriteDetok#1{%
    \immediate\write\pytx@codefile{\detokenize{#1}}}%
\def\pytx@FVB@VerbatimOut{%
    \@bsphack
    \begingroup
    \let\FV@ProcessLine\pytx@WriteDetok
    \let\FV@FontScanPrep\relax
    \let\@noligs\relax
    \FV@Scan}%
\def\pytx@FVE@VerbatimOut{\endgroup\@esphack}%
\let\pytx@EnvAutoprint\@empty
\AtBeginDocument{
    \def\pytx@EnvAutoprint{%
        \ifbool{pytx@opt@autoprint}{%
            \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.stdout}%
                {\DepyFile{p:\pytx@outputdir/\pytx@stdfile.stdout}}{}}{}%
    }
    \ifbool{pytx@opt@stdout}{}{\let\pytx@EnvAutoprint\@empty}
}
\newcommand{\pytx@MakeCodeFV}[1]{%
    \expandafter\newenvironment{#1code}{%
        \VerbatimEnvironment
        \Depythontex{env:#1code:oo|:p}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{code}%
        \pytx@SetContext
        \pytx@SetGroup
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginCodeEnv}{\endgroup\pytx@BeginCodeEnv[]}%
    }%
    {\end{VerbatimOut}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \ifcsname pytx@nonpyconsole@\pytx@type\endcsname
        \ifcsname pytx@code@as@console\endcsname
            \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
            \pytx@FVSet
            \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
            \pytx@ConfigPygments
            \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.stdout}%
               {\DepyFile{p:\pytx@outputdir/\pytx@stdfile.stdout}}%
               {\par\textbf{??~\pytx@packagename~??}\par
                \PackageWarning{\pytx@packagename}{Non-existent console content}}%
            \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
        \else
        \fi
        \let\pytx@EnvAutoprint\relax
    \else
    \fi
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    \pytx@EnvAutoprint
    }%
}%
\def\pytx@BeginCodeEnv[#1]{%
    \ifstrempty{#1}{\edef\pytx@session{default}}{\StrSubstitute{#1}{:}{-}[\pytx@session]}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \edef\pytx@linecount{\pytx@counter @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \pytx@WriteCodefileInfo
    \begingroup
    \obeylines
    \@ifnextchar[{\endgroup\pytx@BeginCodeEnv@i}{\endgroup\pytx@BeginCodeEnv@i[]}%
}%
\def\pytx@BeginCodeEnv@i[#1]{%
    \def\pytx@fvopttmp{#1}%
    \def\pytx@argspprint{#1}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \let\FVB@VerbatimOut\pytx@FVB@VerbatimOut
    \let\FVE@VerbatimOut\pytx@FVE@VerbatimOut
    \begin{VerbatimOut}%
}%
\let\pytx@MakeCodePyg\pytx@MakeCodeFV
\newenvironment{pythontexcustomcode}[2][begin]{%
    \VerbatimEnvironment
    \Depythontex{env:pythontexcustomcode:om:n}%
    \ifstrequal{#1}{begin}{}{%
        \ifstrequal{#1}{end}{}{\PackageError{\pytx@packagename}%
            {Invalid optional argument for pythontexcustomcode}{}
        }%
    }%
    \xdef\pytx@type{CC:#2:#1}%
    \edef\pytx@cmd{code}%
    \pytx@SetContext
    \def\pytx@group{none}%
    \pytx@BeginCodeEnv[none]}%
{\end{VerbatimOut}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
}%
\newcommand{\pytx@MakeSubFV}[1]{%
    \expandafter\newenvironment{#1sub}{%
        \VerbatimEnvironment
        \Depythontex{env:#1sub:oo|:p}%
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{sub}%
        \pytx@SetContext
        \pytx@SetGroup
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginCodeEnv}{\endgroup\pytx@BeginCodeEnv[]}%
    }%
    {\end{VerbatimOut}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.stdout}%
       {\DepyFile{p:\pytx@outputdir/\pytx@stdfile.stdout}}%
       {\textbf{??~\pytx@packagename~??}%
        \PackageWarning{\pytx@packagename}{Non-existent substituted content}}%
    }%
}%
\let\pytx@MakeSubPyg\pytx@MakeSubFV
\newcommand{\pytx@MakeConsFV}[2]{%
    \expandafter\newenvironment{#1#2}{%
        \VerbatimEnvironment
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{env:#1#2:oo|:c}%
        \DepyListing
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{console}%
        \pytx@SetContext
        \pytx@SetGroup
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginConsEnvFV}{\endgroup\pytx@BeginConsEnvFV[]}%
    }%
    {\end{VerbatimOut}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@FVSet
    \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
    \ifcsname FV@SV@\pytx@counter @\arabic{\pytx@counter}\endcsname
        \UseVerbatim{\pytx@counter @\arabic{\pytx@counter}}%
        \DepyMacro{c:\pytx@counter @\arabic{\pytx@counter}}%
    \else
        \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.tex}%
            {\DepyFile{c:\pytx@outputdir/\pytx@stdfile.tex}}%
            {\textbf{??~\pytx@packagename~??}%
                \PackageWarning{\pytx@packagename}{Non-existent console content}}%
    \fi
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}
\def\pytx@BeginConsEnvFV[#1]{%
    \ifstrempty{#1}{\edef\pytx@session{default}}{\StrSubstitute{#1}{:}{-}[\pytx@session]}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \edef\pytx@linecount{\pytx@counter @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \pytx@WriteCodefileInfo
    \begingroup
    \obeylines
    \@ifnextchar[{\endgroup\pytx@BeginConsEnvFV@i}{\endgroup\pytx@BeginConsEnvFV@i[]}%
}%
\def\pytx@BeginConsEnvFV@i[#1]{%
    \def\pytx@fvopttmp{#1}%
    \def\pytx@argspprint{#1}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \let\FVB@VerbatimOut\pytx@FVB@VerbatimOut
    \let\FVE@VerbatimOut\pytx@FVE@VerbatimOut
    \begin{VerbatimOut}%
}%
\newcommand{\pytx@MakeConsPyg}[2]{%
    \expandafter\newenvironment{#1#2}{%
        \VerbatimEnvironment
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{env:#1#2:oo|:c}%
        \DepyListing
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{console}%
        \pytx@SetContext
        \pytx@SetGroup
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginConsEnvFV}{\endgroup\pytx@BeginConsEnvFV[]}%
    }%
    {\end{VerbatimOut}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@FVSet
    \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
    \pytx@ConfigPygments
    \ifcsname FV@SV@\pytx@counter @\arabic{\pytx@counter}\endcsname
        \UseVerbatim{\pytx@counter @\arabic{\pytx@counter}}%
        \DepyMacro{c:\pytx@counter @\arabic{\pytx@counter}}%
    \else
        \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.pygtex}%
            {\DepyFile{c:\pytx@outputdir/\pytx@stdfile.pygtex}}%
            {\textbf{??~\pytx@packagename~??}%
                \PackageWarning{\pytx@packagename}{Non-existent console content}}%
    \fi
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}
\pgfkeys{
    /PYTX/family/.is family,
    /PYTX/family,
    name/.estore in = \pytx@tmp@name,
    prettyprinter/.estore in = \pytx@tmp@pprinter,
    pyglexer/.estore in = \pytx@tmp@pyglexer,
    pygopt/.code = \def\pytx@tmp@pygopt{#1}\pgfkeys{/PYTX/lopt/pygopt/.cd, #1},
    console/.estore in = \pytx@tmp@console,
    default/.style = {prettyprinter=auto, pyglexer=text, pygopt={}, console=false}
}
\def\pytx@MakeFamilyFV#1{%
    \pytx@MakeInlinebFV{#1}%
    \pytx@MakeInlinevFV{#1}%
    \pytx@MakeInlineFV{#1}%
    \pytx@MakeBlockFV{#1}%
    \pytx@MakeVerbFV{#1}%
}
\def\pytx@MakeFamilyPyg#1{%
    \ifbool{pytx@opt@pyginline}%
        {\pytx@MakeInlinebPyg{#1}\pytx@MakeInlinevPyg{#1}}%
        {\pytx@MakeInlinebFV{#1}\pytx@MakeInlinevFV{#1}}%
    \pytx@MakeInlinePyg{#1}%
    \pytx@MakeBlockPyg{#1}%
    \pytx@MakeVerbPyg{#1}%
    \booltrue{pytx@usedpygments}%
    \AtEndDocument{\immediate\write\pytx@codefile{pygfamily=#1|%
        \csname pytx@pyglexer@#1\endcsname|%
        \csname pytx@pygopt@#1\endcsname}%
    }%
}
\def\pytx@MakeFamilyFVCons#1{%
    \pytx@MakeInlinevFV{#1}%
    \pytx@MakeInlineConsFV{#1}%
    \pytx@MakeConsFV{#1}{sole}%
    \pytx@MakeVerbFV{#1}%
}
\def\pytx@MakeFamilyPygCons#1{%
    \ifbool{pytx@opt@pyginline}%
        {\pytx@MakeInlinevPyg{#1}}%
        {\pytx@MakeInlinevFV{#1}}%
    \pytx@MakeInlineConsPyg{#1}%
    \pytx@MakeConsPyg{#1}{sole}%
    \pytx@MakeVerbPyg{#1}%
    \booltrue{pytx@usedpygments}%
    \AtEndDocument{\immediate\write\pytx@codefile{pygfamily=#1|%
        \csname pytx@pyglexer@#1\endcsname|%
        \csname pytx@pygopt@#1\endcsname}%
    }%
}
\newcommand{\makepythontexfamily}[2][]{%
    \IfBeginWith{#2}{PYG}%
        {\PackageError{\pytx@packagename}%
            {Attempt to create macros with reserved prefix PYG}{}}{}%
    \pgfkeys{/PYTX/family, name=#2, default, #1}
    \expandafter\xdef\csname pytx@macroformatter@#2\endcsname{\pytx@tmp@pprinter}
    \expandafter\gdef\csname pytx@fvsettings@#2\endcsname{}
    \expandafter\xdef\csname pytx@pyglexer@#2\endcsname{\pytx@tmp@pyglexer}
    \expandafter\xdef\csname pytx@pygopt@#2\endcsname{\pytx@tmp@pygopt}
    \expandafter\xdef\csname pytx@console@#2\endcsname{\pytx@tmp@console}
    \pytx@MakeInlinecFV{#2}
    \pytx@MakeInlinesFV{#2}
    \pytx@MakeCodeFV{#2}
    \pytx@MakeSubFV{#2}
    \AtBeginDocument{%
        \ifcsstring{pytx@macroformatter@#2}{auto}{%
            \ifbool{pytx@opt@pygments}%
                {\ifcsstring{pytx@console@#2}{true}%
                    {\pytx@MakeFamilyPygCons{#2}}{\pytx@MakeFamilyPyg{#2}}}%
                {\ifcsstring{pytx@console@#2}{true}%
                    {\pytx@MakeFamilyFVCons{#2}}{\pytx@MakeFamilyFV{#2}}}%
        }{}%
        \ifcsstring{pytx@macroformatter@#2}{fancyvrb}%
            {\ifcsstring{pytx@console@#2}{true}%
               {\pytx@MakeFamilyFVCons{#2}}{\pytx@MakeFamilyFV{#2}}}{}%
        \ifcsstring{pytx@macroformatter@#2}{pygments}%
            {\ifcsstring{pytx@console@#2}{true}%
                {\pytx@MakeFamilyPygCons{#2}}{\pytx@MakeFamilyPyg{#2}}}{}%
    }%
    \newcounter{pytx@#2@default@default}%
}
\@onlypreamble\makepythontexfamily
\newcommand{\makepythontexfamily@con}[2][text]{%
    \pgfkeys{/PYTX/family, name=#2con, default, pyglexer=#1, console=true}%
    \expandafter\xdef\csname pytx@macroformatter@#2con\endcsname{\pytx@tmp@pprinter}%
    \expandafter\gdef\csname pytx@fvsettings@#2con\endcsname{}%
    \expandafter\xdef\csname pytx@pyglexer@#2con\endcsname{\pytx@tmp@pyglexer}%
    \expandafter\xdef\csname pytx@pygopt@#2con\endcsname{\pytx@tmp@pygopt}%
    \expandafter\xdef\csname pytx@console@#2con\endcsname{\pytx@tmp@console}%
    \AtEndDocument{\immediate\write\pytx@codefile{pygfamily=#2con|%
        \csname pytx@pyglexer@#2con\endcsname|%
        \csname pytx@pygopt@#2con\endcsname}%
    }%
    \pytx@MakeCodeFV{#2con}%
    \expandafter\global\expandafter\let\csname pytx@nonpyconsole@#2con\endcsname\relax
    \newenvironment{#2console}%
       {\VerbatimEnvironment
        \def\pytx@type{#2con}%
        \let\pytx@code@as@console\relax
        \begin{#2concode}}%
       {\end{#2concode}}%
}

\newcommand{\setpythontexpyglexer}[2][]{%
    \Depythontex{cmd:setpythontexpyglexer:om:n}%
    \ifstrempty{#1}{\def\pytx@pyglexer{#2}}{%
        \ifcsname pytx@pyglexer@#1\endcsname
            \expandafter\xdef\csname pytx@pyglexer@#1\endcsname{#2}%
        \else
            \PackageError{\pytx@packagename}%
                {Cannot modify a non-existent family}{}%
        \fi
    }%
}%
\@onlypreamble\setpythontexpyglexer
\newcommand{\setpythontexpygopt}[2][]{%
    \Depythontex{cmd:setpythontexpygopt:om:n}%
    \ifstrempty{#1}%
     {\def\pytx@pygopt{#2}\pgfkeys{/PYTX/gopt/pygopt/.cd, #2}}%
     {\ifcsname pytx@pygopt@#1\endcsname
        \expandafter\xdef\csname pytx@pygopt@#1\endcsname{#2}%
        \pgfkeys{/PYTX/lopt/pygopt/.cd, name=#1, #2}
      \else
        \PackageError{\pytx@packagename}%
         {Cannot modify Pygments options for a non-existent family}{}%
      \fi}%
}
\@onlypreamble\setpythontexpygopt
\newcommand{\setpythontexprettyprinter}[2][]{%
    \Depythontex{cmd:setpythontexprettyprinter:om:n}%
    \ifstrempty{#1}{%
        \ifstrequal{#2}{fancyvrb}{\boolfalse{pytx@opt@pygments}}%
        \ifstrequal{#2}{pygments}{\booltrue{pytx@opt@pygments}}%
    }{%
        \ifcsname pytx@macroformatter@#1\endcsname
            \ifbool{pytx@opt@depythontex}{}{%
                \expandafter\xdef\csname pytx@macroformatter@#1\endcsname{#2}}
        \else
            \PackageError{\pytx@packagename}%
                {Cannot modify a family that does not exist or does not allow formatter choices}%
                {Create the family with \string\makepythontexfamily}%
        \fi
    }%
}
\@onlypreamble\setpythontexprettyprinter
\makepythontexfamily[pyglexer=python3]{py}
\makepythontexfamily[pyglexer=pycon, console=true]{pycon}
\makepythontexfamily[pyglexer=python3]{sympy}
\makepythontexfamily[pyglexer=pycon, console=true]{sympycon}
\makepythontexfamily[pyglexer=python3]{pylab}
\makepythontexfamily[pyglexer=pycon, console=true]{pylabcon}
\renewcommand{\do}[1]{%
    \ifstrequal{#1}{ruby}{\makepythontexfamily[pyglexer=ruby]{ruby}}{}%
    \ifstrequal{#1}{rb}{\makepythontexfamily[pyglexer=ruby]{rb}}{}%
    \ifstrequal{#1}{julia}{\makepythontexfamily[pyglexer=julia]{julia}}{}%
    \ifstrequal{#1}{juliacon}{\makepythontexfamily@con[jlcon]{julia}}{}%
    \ifstrequal{#1}{jl}{\makepythontexfamily[pyglexer=julia]{jl}}{}%
    \ifstrequal{#1}{matlab}{\makepythontexfamily[pyglexer=matlab]{matlab}}{}%
    \ifstrequal{#1}{octave}{\makepythontexfamily[pyglexer=octave]{octave}}{}%
    \ifstrequal{#1}{bash}{\makepythontexfamily[pyglexer=bash]{bash}}{}%
    \ifstrequal{#1}{sage}{\makepythontexfamily[pyglexer=sage]{sage}}{}%
    \ifstrequal{#1}{rust}{\makepythontexfamily[pyglexer=rust]{rust}}{}%
    \ifstrequal{#1}{rs}{\makepythontexfamily[pyglexer=rust]{rs}}{}%
    \ifstrequal{#1}{R}{\makepythontexfamily[pyglexer=r]{R}}{}%
    \ifstrequal{#1}{Rcon}{\makepythontexfamily@con[rconsole]{R}}{}%
    \ifstrequal{#1}{perl}{\makepythontexfamily[pyglexer=perl]{perl}}{}%
    \ifstrequal{#1}{pl}{\makepythontexfamily[pyglexer=perl]{pl}}{}%
    \ifstrequal{#1}{perlsix}{\makepythontexfamily[pyglexer=perl6]{perlsix}}{}%
    \ifstrequal{#1}{psix}{\makepythontexfamily[pyglexer=perl6]{psix}}{}%
    \ifstrequal{#1}{javascript}{\makepythontexfamily[pyglexer=js]{javascript}}{}%
    \ifstrequal{#1}{js}{\makepythontexfamily[pyglexer=js]{js}}{}%
}
\expandafter\docsvlist\expandafter{\pytx@families}
\newbool{pytx@listingenv}
\def\setpythontexlistingenv#1{%
    \Depythontex{cmd:setpythontexlistingenv:m:n}%
    \DeclareFloatingEnvironment[fileext=lopytx,listname={List of Listings},name=Listing]{#1}
    \booltrue{pytx@listingenv}
}
\@onlypreamble\setpythontexlistingenv
\AtBeginDocument{
    \ifcsname listing\endcsname
        \ifbool{pytx@listingenv}{}%
            {\PackageWarning{\pytx@packagename}%
                {A "listing" environment already exists \MessageBreak
                 \pytx@packagename\space will not create one \MessageBreak
                 Use \string\setpythontexlistingenv\space to create a custom listing environment}}%
    \else
        \ifbool{pytx@listingenv}{}{\DeclareFloatingEnvironment[fileext=lopytx]{listing}}
    \fi
}
\def\pytx@CheckPygmentsInit#1{%
    \ifcsname pytx@fvsettings@PYG#1\endcsname\else
        \expandafter\gdef\csname pytx@fvsettings@PYG#1\endcsname{}%
        \expandafter\gdef\csname pytx@pygopt@PYG#1\endcsname{}%
        \AtEndDocument{\immediate\write\pytx@codefile{pygfamily=PYG#1|#1|%
            \csname pytx@pygopt@PYG#1\endcsname}}%
    \fi
}
\def\pytx@MakePygmentsInlineFV{%
    \newcommand{\pygment}[1]{%
        \edef\pytx@lexer{##1}%
        \Depythontex{cmd:pygment:mv:c}%
        \edef\pytx@type{PYG##1}%
        \edef\pytx@cmd{v}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \let\pytx@InlineShow\pytx@InlineShowFV
        \let\pytx@InlineSave\@empty
        \let\pytx@InlinePrint\@empty
        \pytx@CheckPygmentsInit{##1}%
        \pytx@Inline[]%
    }%
}
\def\pytx@MakePygmentsInlinePyg{%
    \newcommand{\pygment}[1]{%
        \edef\pytx@type{PYG##1}%
        \edef\pytx@cmd{v}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \let\pytx@InlineShow\pytx@InlineShowPyg
        \let\pytx@InlineSave\pytx@InlineSaveCode
        \let\pytx@InlinePrint\@empty
        \pytx@CheckPygmentsInit{##1}%
        \pytx@Inline[]
    }%
}
\def\pytx@MakePygmentsEnvFV{%
    \newenvironment{pygments}{%
        \VerbatimEnvironment
        \pytx@SetContext
        \pytx@SetGroupVerb
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BEPygmentsFV}{\endgroup\pytx@BEPygmentsFV[]}%
    }%
    {\end{Verbatim}%
        \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
        \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    }%
}
\def\pytx@BEPygmentsFV[#1]{%
    \def\pytx@fvopttmp{#1}%
    \def\pytx@argspprint{#1}%
    \begingroup
    \obeylines
    \pytx@BEPygmentsFV@i
}
\def\pytx@BEPygmentsFV@i#1{%
    \endgroup
    \edef\pytx@type{PYG#1}%
    \edef\pytx@lexer{#1}%
    \Depythontex{env:pygments:om:c}%
    \DepyListing
    \edef\pytx@cmd{verbatim}%
    \edef\pytx@session{default}%
    \edef\pytx@linecount{pytx@\pytx@type @\pytx@session @\pytx@group @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \pytx@CheckPygmentsInit{#1}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@FVSet
    \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
    \begin{Verbatim}%
}
\def\pytx@MakePygmentsEnvPyg{%
    \newenvironment{pygments}{%
        \VerbatimEnvironment
        \pytx@SetContext
        \pytx@SetGroupVerb
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BEPygmentsPyg}{\endgroup\pytx@BEPygmentsPyg[]}%
    }%
    {\end{VerbatimOut}%
        \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
        \pytx@FVSet
        \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
        \pytx@ConfigPygments
        \ifcsname FV@SV@\pytx@counter @\arabic{\pytx@counter}\endcsname
            \UseVerbatim{\pytx@counter @\arabic{\pytx@counter}}%
        \else
            \InputIfFileExists{\pytx@outputdir/%
                \pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}.pygtex}{}%
                {\textbf{??~\pytx@packagename~??}%
                    \PackageWarning{\pytx@packagename}{Non-existent Pygments content}}%
        \fi
        \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
        \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
        \stepcounter{\pytx@counter}%
    }%
}
\def\pytx@BEPygmentsPyg[#1]{%
    \def\pytx@fvopttmp{#1}%
    \def\pytx@argspprint{#1}%
    \begingroup
    \obeylines
    \pytx@BEPygmentsPyg@i
}
\def\pytx@BEPygmentsPyg@i#1{%
    \endgroup
    \edef\pytx@type{PYG#1}%
    \edef\pytx@cmd{verbatim}%
    \edef\pytx@session{default}%
    \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
    \pytx@CheckCounter{\pytx@counter}%
    \edef\pytx@linecount{\pytx@counter @line}%
    \pytx@CheckCounter{\pytx@linecount}%
    \pytx@WriteCodefileInfo
    \pytx@CheckPygmentsInit{#1}%
    \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
    \let\FVB@VerbatimOut\pytx@FVB@VerbatimOut
    \let\FVE@VerbatimOut\pytx@FVE@VerbatimOut
    \begin{VerbatimOut}%
}
\def\pytx@MakePygmentsInputFV{
    \newcommand{\inputpygments}[3][]{%
        \edef\pytx@lexer{##2}%
        \Depythontex{cmd:inputpygments:omm:c}%
        \edef\pytx@type{PYG##2}%
        \edef\pytx@cmd{verbatim}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \edef\pytx@session{EXT:##3}%
        \pytx@CheckPygmentsInit{##2}%
        \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
        \pytx@CheckCounter{\pytx@counter}%
        \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
        \begingroup
        \DepyListing %Always must be in a group
        \pytx@FVSet
        \fvset{firstnumber=auto}%
        \IfFileExists{##3}%
            {\DepyFile{c:##3:mode=verbatim}\VerbatimInput[##1]{##3}}%
            {\PackageWarning{\pytx@packagename}{Input file <##3> doesn't exist}}%
        \endgroup
        \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
        \stepcounter{\pytx@counter}%
    }%
}
\def\pytx@MakePygmentsInputPyg{
    \newcommand{\inputpygments}[3][]{%
        \begingroup
        \edef\pytx@type{PYG##2}%
        \edef\pytx@cmd{verbatim}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \def\pytx@argspprint{##1}%
        \edef\pytx@session{EXT:##3}%
        \pytx@CheckPygmentsInit{##2}%
        \xdef\pytx@counter{pytx@\pytx@type @\pytx@session @\pytx@group}%
        \pytx@CheckCounter{\pytx@counter}%
        \pytx@WriteCodefileInfoExt
        \IfFileExists{##3}{}{\PackageWarning{\pytx@packagename}%
            {Input file <##3> does not exist}}%
        \setcounter{pytx@FancyVerbLineTemp}{\value{FancyVerbLine}}%
        \begingroup
        \pytx@FVSet
        \fvset{firstnumber=auto}%
        \pytx@ConfigPygments
        \ifcsname FV@SV@pytx@\pytx@type @\pytx@session @\pytx@group
                    @\arabic{\pytx@counter}\endcsname
            \UseVerbatim[##1]{pytx@\pytx@type @\pytx@session @\pytx@group
                    @\arabic{\pytx@counter}}%
        \else
            \InputIfFileExists{\pytx@outputdir/\pytx@type_##3_\pytx@group
                    _\arabic{\pytx@counter}.pygtex}{}%
                {\textbf{??~\pytx@packagename~??}%
                    \PackageWarning{\pytx@packagename}{Non-existent Pygments content}}%
        \fi
        \endgroup
        \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
        \stepcounter{\pytx@counter}%
        \endgroup
    }%
}
\newcommand{\setpygmentsfv}[2][]{%
    \Depythontex{cmd:setpygmentsfv:om:n}%
    \ifstrempty{#1}%
        {\gdef\pytx@fvsettings{#2}}%
        {\expandafter\gdef\csname pytx@fvsettings@PYG#1\endcsname{#2}}%
}%
\newcommand{\setpygmentspygopt}[2][]{%
    \Depythontex{cmd:setpygmentspygopt:om:n}%
    \ifstrempty{#1}%
     {\def\pytx@pygopt{#2}\pgfkeys{/PYTX/gopt/pygopt/.cd, #2}}%
     {\expandafter\gdef\csname pytx@pygopt@PYG#1\endcsname{#2}%
      \pgfkeys{/PYTX/popt/pygopt/.cd, name=#1, #2}}%
}
\@onlypreamble\setpygmentspygopt
\newcommand{\setpygmentsprettyprinter}[1]{%
    \Depythontex{cmd:setpygmentsprettyprinter:m:n}%
    \ifstrequal{#1}{fancyvrb}{\boolfalse{pytx@opt@pygments}}%
    \ifstrequal{#1}{pygments}{\booltrue{pytx@opt@pygments}}%
}
\@onlypreamble\setpygmentsprettyprinter
\xdef\pytx@macroformatter@PYG{auto}
\def\makepygmentsfv{%
    \pytx@MakePygmentsInlineFV
    \pytx@MakePygmentsEnvFV
    \pytx@MakePygmentsInputFV
}%
\@onlypreamble\makepygmentsfv
\def\makepygmentspyg{%
    \ifbool{pytx@opt@pyginline}%
        {\pytx@MakePygmentsInlinePyg}%
        {\pytx@MakePygmentsInlineFV}%
    \pytx@MakePygmentsEnvPyg
    \pytx@MakePygmentsInputPyg
    \booltrue{pytx@usedpygments}
}%
\@onlypreamble\makepygmentspyg
\def\makepygments{%
    \AtBeginDocument{%
        \ifdefstring{\pytx@macroformatter@PYG}{auto}%
            {\ifbool{pytx@opt@pygments}%
                {\makepygmentspyg}{\makepygmentsfv}}{}
        \ifdefstring{\pytx@macroformatter@PYG}{pygments}%
            {\makepygmentspyg}{}
        \ifdefstring{\pytx@macroformatter@PYG}{fancyvrb}%
            {\makepygmentsfv}{}
    }%
}%
\@onlypreamble\makepygments
\makepygments
\AfterEndDocument{%
    \immediate\closeout\pytx@codefile
    \ifbool{pytx@opt@depythontex}{\immediate\closeout\pytx@depyfile}{}%
}
\ifbool{pytx@opt@beta}{

\def\pytx@FetchStdoutfile[#1][#2]#3{%
    \IfFileExists{\pytx@outputdir/#3.stdout}{%
        \ifstrempty{#1}{\input{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{raw}{\input{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{verb}{\VerbatimInput[#2]{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{inlineverb}{\BVerbatimInput[#2]{\pytx@outputdir/#3.stdout}}{}%
        \ifstrequal{#1}{v}{\BVerbatimInput[#2]{\pytx@outputdir/#3.stdout}}{}%
        \DepyFile{p:\pytx@outputdir/#3.stdout:mode=#1}%
    }%
    {\pytx@stdout@warntext
        \PackageWarning{\pytx@packagename}{Non-existent printed content}}%
}
\def\pytx@FetchStderrfile[#1][#2]#3{%
    \IfFileExists{\pytx@outputdir/#3.stderr}{%
        \ifstrequal{#1}{raw}{\input{\pytx@outputdir/#3.stderr}}{}%
        \ifstrempty{#1}{\VerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \ifstrequal{#1}{verb}{\VerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \ifstrequal{#1}{inlineverb}{\BVerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \ifstrequal{#1}{v}{\BVerbatimInput[#2]{\pytx@outputdir/#3.stderr}}{}%
        \DepyFile{p:\pytx@outputdir/#3.stderr:mode=#1}%
    }%
    {\textbf{??~\pytx@packagename~??}%
        \PackageWarning{\pytx@packagename}{Non-existent stderr content}}%
}

\renewcommand{\pytx@MakeVerbFV}[1]{%
    \expandafter\newenvironment{#1verb}{%
        \VerbatimEnvironment
        \expandafter\let\expandafter\pytx@lexer\csname pytx@pyglexer@#1\endcsname
        \Depythontex{env:#1verb:oo|:c}%
        \DepyListing
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{verb}%
        \pytx@SetContext
        \pytx@SetGroupVerb
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginVerbEnvFV}{\endgroup\pytx@BeginVerbEnvFV[]}%
    }%
    {\end{Verbatim}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}
\renewcommand{\pytx@MakePygEnv}[2]{%
    \expandafter\newenvironment{#1#2}{%
        \VerbatimEnvironment
        \xdef\pytx@type{#1}%
        \edef\pytx@cmd{#2}%
        \pytx@SetContext
        \ifstrequal{#2}{block}{\pytx@SetGroup}{}
        \ifstrequal{#2}{verb}{\pytx@SetGroupVerb}{}
        \begingroup
        \obeylines
        \@ifnextchar[{\endgroup\pytx@BeginEnvPyg}{\endgroup\pytx@BeginEnvPyg[]}%
    }%
    {\end{VerbatimOut}%
    \xdef\pytx@stdfile{\pytx@type_\pytx@session_\pytx@group_\arabic{\pytx@counter}}%
    \setcounter{FancyVerbLine}{\value{\pytx@linecount}}%
    \pytx@FVSet
    \ifdefstring{\pytx@fvopttmp}{}{}{\expandafter\fvset\expandafter{\pytx@fvopttmp}}%
    \ifcsname FV@SV@\pytx@counter @\arabic{\pytx@counter}\endcsname
        \UseVerbatim{\pytx@counter @\arabic{\pytx@counter}}%
    \else
        \InputIfFileExists{\pytx@outputdir/\pytx@stdfile.pygtex}{}%
            {\textbf{??~\pytx@packagename~??}%
                \PackageWarning{\pytx@packagename}{Non-existent Pygments content}}%
    \fi
    \setcounter{\pytx@linecount}{\value{FancyVerbLine}}%
    \setcounter{FancyVerbLine}{\value{pytx@FancyVerbLineTemp}}%
    \stepcounter{\pytx@counter}%
    }%
}%
\renewcommand{\pytx@MakeVerbPyg}[1]{\pytx@MakePygEnv{#1}{verb}}

\def\setpythontexpyglexer#1#2{%
    \Depythontex{cmd:setpythontexpyglexer:mm:n}%
    \ifcsname pytx@pyglexer@#1\endcsname
        \expandafter\xdef\csname pytx@pyglexer@#1\endcsname{#2}%
    \else
        \PackageError{\pytx@packagename}%
            {Cannot modify a non-existent family}{}%
    \fi
}%
\renewcommand{\setpythontexpygopt}[2]{%
    \Depythontex{cmd:setpythontexpygopt:mm:n}%
    \ifcsname pytx@pygopt@#1\endcsname
        \expandafter\xdef\csname pytx@pygopt@#1\endcsname{#2}%
    \else
        \PackageError{\pytx@packagename}%
            {Cannot modify Pygments options for a non-existent family}{}%
    \fi
}
\def\setpygmentspygopt#1#2{%
    \Depythontex{cmd:setpygmentspygopt:mm:n}%
    \AtEndDocument{\immediate\write\pytx@codefile{%
        \pytx@delimsettings pygfamily=PYG#1,#1,%
        \string{#2\string}\pytx@delimchar}%
    }%
}

\def\setpythontexformatter#1#2{%
    \Depythontex{cmd:setpythontexformatter:mm:n}%
    \ifcsname pytx@macroformatter@#1\endcsname
        \ifbool{pytx@opt@depythontex}{}{%
            \expandafter\xdef\csname pytx@macroformatter@#1\endcsname{#2}}
    \else
        \PackageError{\pytx@packagename}%
            {Cannot modify a family that does not exist or does not allow formatter choices}%
            {Create the family with \string\makepythontexfamily}%
    \fi
}
\@onlypreamble\setpythontexformatter
\def\setpygmentsformatter#1{%
    \Depythontex{cmd:setpygmentsformatter:m:n}%
    \ifbool{pytx@opt@depythontex}{}{\xdef\pytx@macroformatter@PYG{#1}}}
\@onlypreamble\setpygmentsformatter

}{} %End beta
%% \Finale
\endinput
%%
%% End of file `pythontex.sty'.
